﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using supervisor_de_cajas;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace supervisor_de_cajas
{
    public partial class Supervisor : Form
    {
        public Supervisor()
        {
            InitializeComponent();
        }
        Conexion conn = new Conexion();
        Gestion g = new Gestion();

        
        private void timer1_Tick(object sender, EventArgs e)
        {
            reloj.Text = DateTime.Now.ToLongTimeString();
        }

        private void txtrut_TextChanged(object sender, EventArgs e)
        {
            if (txtrut.Text == "")
            {
                txtdigito.Text = "";
            }
            if (txtrut.TextLength == 7 || txtrut.TextLength == 8)
            {
                int rut = Convert.ToInt32(txtrut.Text);
                string digito = g.digitoVerificador(rut);
                txtdigito.Text = digito;
            }
        }

        private void txtnombre_Validating(object sender, CancelEventArgs e)
        {
            txtnombre.Text = Regex.Replace(txtnombre.Text.Trim(), @"\s+", " ");
        }

        private void txtapellido_Validating(object sender, CancelEventArgs e)
        {
            txtapellido.Text = Regex.Replace(txtapellido.Text.Trim(), @"\s+", " ");
        }

        private void txtpass_Validating(object sender, CancelEventArgs e)
        {
            txtpass.Text = Regex.Replace(txtpass.Text.Trim(), @"\s+", " ");
        }

        private void txtnombre_TextChanged(object sender, EventArgs e)
        {

        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void Supervisor_Load(object sender, EventArgs e)
        {
            labelsesion.Text = g.recuperarNombreSesion(login.sesion)+" "+g.recuperarApellidoSesion(login.sesion);
            btnuevor.Enabled = false;
            cbfiltro.SelectedIndex = 0;
            listar();
            timer1.Start();
        }

        private void txtrut_Validating(object sender, CancelEventArgs e)
        {
            txtrut.Text = Regex.Replace(txtrut.Text.Trim(), @"\s+", " ");
        }

        private void txtnombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar) && e.KeyChar != '\b') { e.Handled = true; }
        }

        private void txtrut_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else
                if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                {
                    e.Handled = false;
                }
                else
                {
                    //el resto de teclas pulsadas se desactivan 
                    e.Handled = true;
                }
        }

        private void txtapellido_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar) && e.KeyChar != '\b') { e.Handled = true; }
        }

        private void txtpass_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !char.IsControl(e.KeyChar) && !char.IsSeparator(e.KeyChar) && !char.IsDigit(e.KeyChar)) { e.Handled = true; } else { e.Handled = false; }
        }

        private void insertar()
        {
            string rutcompleto = txtrut.Text + txtdigito.Text;
            try
            {
                conn.conectar();
                SqlCommand cmd = new SqlCommand("Supervisor_Insert", conn.conector);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@nombre", SqlDbType.VarChar, 50).Value = txtnombre.Text;
                cmd.Parameters.Add("@apellido", SqlDbType.VarChar, 50).Value = txtapellido.Text;
                cmd.Parameters.Add("@rut", SqlDbType.VarChar, 50).Value = rutcompleto;
                cmd.Parameters.Add("@pass", SqlDbType.VarChar, 50).Value = txtpass.Text;
                cmd.Parameters.Add("@estado", SqlDbType.VarChar, 50).Value = txtestado.Text;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Supervisor Agregado con exito.!");
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion a la Base de datos.");
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }
        private void listar()
        {
            try
            {
                conn.conectar();
                SqlDataAdapter da = new SqlDataAdapter("Supervisor_Select", conn.conector);
                DataTable dt = new DataTable();
                da.Fill(dt);
                dgvbusq.DataSource = dt;
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion a la Base de datos.");
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }

        private void btregistrar_Click(object sender, EventArgs e)
        {
            string rutC = txtrut.Text + txtdigito.Text;
            //int rut = int.Parse(rutC);
            if (btregistrar.Text.Equals("Registrar"))
            {
                if (txtnombre.Text == "" || txtrut.Text == "" || txtapellido.Text == "" || txtpass.Text == "")
                {
                    MessageBox.Show("Debe completar todos los datos.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    if (g.ExisteSupervisor(rutC) == true)
                    {
                        MessageBox.Show("El rut ingresado ya existe en la base de datos", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        g.Limpiar(groupBox1);
                        txtrut.Focus();
                    }
                    else
                    {
                        if (txtrut.Text.Length < 7) { MessageBox.Show("El rut ingresado es demasiado corto.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
                        else
                        {
                            insertar();
                            g.Limpiar(groupBox1);
                        }
                    }
                }
            }
            if (btregistrar.Text.Equals("Guardar"))
            {
                if (txtid.Text == "")
                {
                    MessageBox.Show("Debe seleccionar una filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                            if (txtrut.Text == dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[3].Value.ToString() &&
                            txtid.Text == dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[0].Value.ToString() &&
                            txtnombre.Text == dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[1].Value.ToString() &&
                            txtapellido.Text == dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[2].Value.ToString() &&
                            txtpass.Text == dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[4].Value.ToString())
                            {
                                MessageBox.Show("No se han realizado cambios.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                btregistrar.Text = "Registrar";
                                g.Limpiar(groupBox1);
                                txtdigito.Visible = true;
                                txtrut.ReadOnly = false;
                                txtrut.Focus();
                                btnuevor.Enabled = false;
                                txtid.Text = "";
                            }
                            else
                            {
                                modificar();
                                btregistrar.Text = "Registrar";
                                g.Limpiar(groupBox1);
                                txtdigito.Visible = true;
                                txtrut.ReadOnly = false;
                                txtrut.Focus();
                                btnuevor.Enabled = false;
                                txtid.Text = "";
                                
                            }
                        
                    
                }
            }
            listar();


        }

        private void btnuevor_Click(object sender, EventArgs e)
        {
            btnuevor.Enabled = false;
            txtdigito.Visible = true;
            txtrut.ReadOnly = false;
            txtrut.Focus();
            g.Limpiar(groupBox1);
            btregistrar.Text = "Registrar";
            txtrut.Focus();
            /*chkactivo.Visible = false;
            chkinactivo.Visible = false;
            labelestado.Visible = false;*/
        }

        private void cbfiltro_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbfiltro.Text == "Todos")
            {
                txtbusqueda.Enabled = false;
                listar();
            }
            else
            {
                txtbusqueda.Enabled = true;
                txtbusqueda.Text = "";
                if (cbfiltro.Text == "Rut")
                {
                    txtbusqueda.MaxLength = 8;
                }
                if (cbfiltro.Text == "Nombre")
                {
                    txtbusqueda.MaxLength = 40;
                    txtbusqueda.ToString().Replace('"', ' ').Trim();
                }
                if (cbfiltro.Text == "Apellido")
                {
                    txtbusqueda.MaxLength = 40;
                }
                if (cbfiltro.Text == "Pass")
                {
                    txtbusqueda.MaxLength = 40;
                }
                if (cbfiltro.Text == "Activo")
                {
                    dgvbusq.DataSource = g.getActivossup();
                    dgvbusq.DataMember = "supervisor";
                    txtbusqueda.Enabled = false;
                    
                }
                if (cbfiltro.Text == "Inactivo")
                {
                    dgvbusq.DataSource = g.getInActivossup();
                    dgvbusq.DataMember = "supervisor";
                    txtbusqueda.Enabled = false;
                    
                }
            }
        }

        private void txtbusqueda_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !char.IsControl(e.KeyChar) && !char.IsSeparator(e.KeyChar) && !char.IsDigit(e.KeyChar)) { e.Handled = true; } 
            else { e.Handled = false; }
             
            
            if (cbfiltro.Text == "Rut")
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                    if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                    {
                        e.Handled = false;
                    }
                    else
                    {
                        //el resto de teclas pulsadas se desactivan 
                        e.Handled = true;
                    }
            }
            if (cbfiltro.Text == "Nombre" || cbfiltro.Text == "Apellido")
            {
                if (Char.IsLetter(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsSeparator(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }
        }

        private void txtbusqueda_TextChanged(object sender, EventArgs e)
        {
            if (cbfiltro.Text == "Todos")
            {
                listar();
            }
            else
            {
                dgvbusq.DataSource = g.verSupervisorFiltro(" WHERE " + cbfiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbfiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbfiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbfiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbfiltro.Text + " LIKE '%" + txtbusqueda.Text + "%'");
                dgvbusq.DataMember = "supervisor";
            }
        }

        private void dgvbusq_Click(object sender, EventArgs e)
        {
            btnuevor.Enabled = true;
            txtdigito.Visible = false;
            txtrut.ReadOnly = true;
            txtrut.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[3].Value.ToString();
            txtid.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[0].Value.ToString();
            txtnombre.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[1].Value.ToString();
            txtapellido.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[2].Value.ToString();
            txtpass.Text = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[4].Value.ToString();
            string estado = dgvbusq.Rows[dgvbusq.CurrentCell.RowIndex].Cells[5].Value.ToString();
            /*if (estado.Equals("Activo"))
                 chkactivo.Checked = true;
             else
                 chkinactivo.Checked = true;*/

            btregistrar.Text = "Guardar";
            //chkactivo.Visible = true;
            //chkinactivo.Visible = true;
            //labelestado.Visible = true;
        }

        private void bteliminar_Click(object sender, EventArgs e)
        {


            if (dgvbusq.SelectedRows.Count == 0)
            {
                MessageBox.Show("Debe seleccionar una o varias filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                
                if (login.sesion==txtrut.Text)
                {
                    MessageBox.Show("No se pudo realizar la acción.\nNO se puede eliminar a si mismo.\nNOTA: Los demás registros seleccionados seran eliminados.", "Precaución", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    int reg = 0;
                    int n = 0;
                    for (int i = 0; i < dgvbusq.RowCount; i++)
                    {
                        
                        
                            if (dgvbusq.Rows[i].Selected == true)
                            {
                                //Codigo y mas codigo
                                if (dgvbusq[3, i].Value.ToString() == login.sesion)
                                {
                                    MessageBox.Show("No se pudo realizar la acción.\nNO se puede eliminar a si mismo.\nNOTA: Los demás registros seleccionados seran eliminados.", "Precaución", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                }
                                else
                                {
                                        int codigo;
                                        int.TryParse(dgvbusq[0, i].Value.ToString(), out codigo);
                                        g.eliminarSupervisor(codigo);

                                        txtid.Text = "";
                                        txtrut.ReadOnly = false;
                                        txtdigito.Visible = true;
                                        n = n + 1;
                                    
                                }
                            }
                            
                    }
                    /*if (n >= 1)
                    {
                        MessageBox.Show("Nº de registros Eliminados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    /*if (n == 0)
                    {
                        MessageBox.Show("No se han realizado cambios.\nNº de registros Eliminados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }*/
                    listar();
                    g.Limpiar(groupBox1);
                    btregistrar.Text = "Registrar";
                    btnuevor.Enabled = false;
                }
            }
        }

        private void btactivar_Click(object sender, EventArgs e)
        {
            if (dgvbusq.SelectedRows.Count == 0)
            {
                MessageBox.Show("Debe seleccionar una o varias filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                int reg = 0;
                int n = 0;
                for (int i = 0; i < dgvbusq.RowCount; i++)
                {

                    if (dgvbusq.Rows[i].Selected == true)
                    {
                        
                            //Codigo y mas codigo
                            int codigo;
                            int.TryParse(dgvbusq[0, i].Value.ToString(), out codigo);
                            g.ActivarSupervisor(codigo);
                            txtid.Text = "";
                            txtrut.ReadOnly = false;
                            txtdigito.Visible = true;
                            n = n + 1;
                        

                    }
                }
                /*if (n >= 1)
                {
                    MessageBox.Show("Nº de registros Activados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                /*if (n == 0)
                {
                    MessageBox.Show("No se han realizado cambios.\nNº de registros Activados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }*/
                listar();
                g.Limpiar(groupBox1);
                btregistrar.Text = "Registrar";
                btnuevor.Enabled = false;
            }
        }
        private void modificar()
        {
            string rutcompleto = txtrut.Text + txtdigito.Text;
            try
            {
                /*string status = "";
                if (chkactivo.Checked == true)
                    status = "Activo";
                if (chkinactivo.Checked == true)
                    status = "Inactivo";*/
                conn.conectar();
                SqlCommand cmd = new SqlCommand("Supervisor_Update", conn.conector);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@nombre", SqlDbType.VarChar, 50).Value = txtnombre.Text;
                cmd.Parameters.Add("@apellido", SqlDbType.VarChar, 50).Value = txtapellido.Text;
                cmd.Parameters.Add("@idsupervisor", SqlDbType.Int).Value = txtid.Text;
                cmd.Parameters.Add("@pass", SqlDbType.VarChar, 50).Value = txtpass.Text;
                // cmd.Parameters.Add("@estado", SqlDbType.VarChar, 50).Value = status;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Los datos han sido actualizados.!");
                
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion a la Base de datos.");
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }

        private void txtbusqueda_Validating(object sender, CancelEventArgs e)
        {
            
        }
    }
}
